package com.fingard.dsp.bank.directbank.cncbi01;


import com.fingard.dsp.bank.directbank.PaymentState;
import com.fingard.dsp.bank.directbank.bankInterface.IForeignExchange;
import com.fingard.dsp.bank.reqrespobj.foreignexchange.ReqFX01;
import com.fingard.dsp.bank.reqrespobj.foreignexchange.ReqFX02;
import com.fingard.dsp.bank.reqrespobj.foreignexchange.RetAtsForeignCurrency;
import com.fingard.dsp.bank.reqrespobj.foreignexchange.detail.RetAtsForeignCurrencyDetail;
import com.fingard.net.ConnState;
import com.fingard.xml.XElement;
import com.fingard.xml.XmlTextReader;
import com.fingard.xml.XmlTextWriter;

/**
 * Created by F on 2018/11/19.
 */
public class CNCBI01ForeignExchange extends CNCBI01Base implements IForeignExchange {
    @Override
    public RetAtsForeignCurrency foreignExchange(ReqFX01 p_reqFX01) throws Exception {
        RetAtsForeignCurrency retAts = new RetAtsForeignCurrency(p_reqFX01.reqHeader);
        RetAtsForeignCurrencyDetail detail = new RetAtsForeignCurrencyDetail();
        try {
            XmlTextWriter xmlWriter = new XmlTextWriter();
            xmlWriter.writeStartDocByDeclaration("<?xml version=\"1.0\" encoding=\"GBK\"?>");
            XElement stream = new XElement("stream", "");
            stream.addChild(new XElement("action", "DLFXDTRN"));
            stream.addChild(new XElement("userName", bankFront.loginName));
//            <clientID></clientID><!--客户流水号 varchar (20)-->
            stream.addChild(new XElement("clientID", p_reqFX01.singleDetail.askNumber));
//            <tranType></tranType><!--交易方式char(1), 1-即期外汇交易（SPOT）、2-远期外汇交易（FORWARD）、3-掉期外汇交易（SWAP）-->
            String tranType = p_reqFX01.singleDetail.tranType;
            stream.addChild(new XElement("tranType", p_reqFX01.singleDetail.tranType));
//            <ceiforexNo></ceiforexNo><!--信银国际外汇交易号char(20),可空-->
            stream.addChild(new XElement("ceiforexNo", p_reqFX01.singleDetail.ceiforexNo));
            String buysell = p_reqFX01.singleDetail.businessType;
            if (!"3".equals(tranType)) {
//            <accountNo></accountNo><!--付款账号char(12),易方式为即期外汇交易和远期外汇交易时，必输；交易方式为掉期外汇交易时，送空-->
                stream.addChild(new XElement("accountNo", p_reqFX01.singleDetail.accountNo));
//            <payCryType></payCryType><!--付款账号币种char(2), 交易方式为即期外汇交易和远期外汇交易时，必输；交易方式为掉期外汇交易时，送空; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD ->
                stream.addChild(new XElement("payCryType",
                        convertCurToBank(p_reqFX01.singleDetail.accountNo.substring(p_reqFX01.singleDetail.accountNo.length() - 2))));
//            <rcvAcc></rcvAcc><!--收款账号char(12)，交易方式为即期外汇交易和远期外汇交易时，必输；交易方式为掉期外汇交易时，送空-->
                stream.addChild(new XElement("rcvAcc", p_reqFX01.singleDetail.rcvAcc));
//            <rcvCryType></rcvCryType><!--收款账号币种char(2), 交易方式为即期外汇交易和远期外汇交易时，必输; 交易方式为掉期外汇交易时，送空; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD -->
                stream.addChild(new XElement("rcvCryType",
                        convertCurToBank(p_reqFX01.singleDetail.rcvAcc.substring(p_reqFX01.singleDetail.rcvAcc.length() - 2))));
                //            <businessType></businessType><!--买入/卖出char(1), 交易方式为即期外汇交易和远期外汇交易时，必输；交易方式为掉期外汇交易时，送空; 数据字典：0-买入；1-卖出-->
                stream.addChild(new XElement("businessType", p_reqFX01.singleDetail.businessType));
                //            <incryType></incryType><!--买入币种char(2), 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为0-买入时必输，为1-卖出时选输; 交易方式为掉期外汇交易时，送空；数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                /*
                if ("0".equals(buysell)) {
                    stream.addChild(new XElement("incryType", convertCurToBank(p_reqFX01.singleDetail.incryType)));
//            <buyAmt></buyAmt><!--买入金额deciam(15,2）, 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为0-买入时必输，为1-卖出时选输；交易方式为掉期外汇交易时，送空-->
                    stream.addChild(new XElement("buyAmt", p_reqFX01.singleDetail.buyAmt));
                    stream.addChild(new XElement("outcryType", ""));
                    stream.addChild(new XElement("sellAmt", ""));
                } else {
                    stream.addChild(new XElement("incryType", ""));
                    stream.addChild(new XElement("buyAmt", ""));
//            <outcryType></outcryType><!--卖出币种char(2), 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为1-卖出时必输，为0-买入时选输；交易方式为掉期外汇交易时，送空；
                    stream.addChild(new XElement("outcryType", convertCurToBank(p_reqFX01.singleDetail.outcryType)));
//            <sellAmt></sellAmt><!--卖出金额deciam(15,2）, 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为1-卖出时必输，为0-买入时选输；交易方式为掉期外汇交易时，送空-->
                    stream.addChild(new XElement("sellAmt", p_reqFX01.singleDetail.sellAmt));
                }*/
                //            <incryType></incryType><!--买入币种char(2), 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为0-买入时必输，为1-卖出时选输; 交易方式为掉期外汇交易时，送空；数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                stream.addChild(new XElement("incryType", convertCurToBank(p_reqFX01.singleDetail.incryType)));
                //<buyAmt></buyAmt><!--买入金额deciam(15,2）, 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为0-买入时必输，为1-卖出时选输；交易方式为掉期外汇交易时，送空-->
                stream.addChild(new XElement("buyAmt", p_reqFX01.singleDetail.buyAmt));
                //            <outcryType></outcryType><!--卖出币种char(2), 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为1-卖出时必输，为0-买入时选输；交易方式为掉期外汇交易时，送空；
                stream.addChild(new XElement("outcryType", convertCurToBank(p_reqFX01.singleDetail.outcryType)));
                //            <sellAmt></sellAmt><!--卖出金额deciam(15,2）, 交易方式为即期外汇交易和远期外汇交易，<businessType>标签为1-卖出时必输，为0-买入时选输；交易方式为掉期外汇交易时，送空-->
                stream.addChild(new XElement("sellAmt", p_reqFX01.singleDetail.sellAmt));
//                <deliDate></deliDate><!--交割日期char(8), 交易方式为即期外汇交易和远期外汇交易时，必输; 交易方式为掉期外汇交易时，送空; 格式：YYYYMMDD-->
                stream.addChild(new XElement("deliDate", p_reqFX01.singleDetail.deliDate.replace("-","")));
//                <sexcRate></sexcRate><!--即期汇率decimal(19,8), 交易方式为即期外汇交易时，必输；交易方式为掉期外汇交易和远期外汇交易时，送空-->
                if ("1".equals(tranType)) {
                    stream.addChild(new XElement("sexcRate", p_reqFX01.singleDetail.sexcRate));
                    stream.addChild(new XElement("forwdRate", ""));
                } else {
//            <forwdRate></forwdRate><!--远期汇率decimal(19,8). 交易方式为远期外汇交易时，必输；交易方式为即期外汇交易和掉期外汇交易时，送空-->
                    stream.addChild(new XElement("sexcRate", ""));
                    stream.addChild(new XElement("forwdRate", p_reqFX01.singleDetail.forwdRate));
                }
                stream.addChild(new XElement("nsetlDate", ""));
                stream.addChild(new XElement("nincryType", ""));
                stream.addChild(new XElement("ninAmt", ""));
                stream.addChild(new XElement("noutcryType", ""));
                stream.addChild(new XElement("noutAmt", ""));
                stream.addChild(new XElement("nexcRate", ""));
                stream.addChild(new XElement("nrcvAcc", ""));
                stream.addChild(new XElement("nrcvcType", ""));
                stream.addChild(new XElement("npayAcc", ""));
                stream.addChild(new XElement("npaycryType", ""));
                stream.addChild(new XElement("fincryType", ""));
                stream.addChild(new XElement("finAmt", ""));
                stream.addChild(new XElement("foutcryType", ""));
                stream.addChild(new XElement("foutAmt", ""));
                stream.addChild(new XElement("fexcRate", ""));
                stream.addChild(new XElement("frcvAcc", ""));
                stream.addChild(new XElement("frcvcryType", ""));
                stream.addChild(new XElement("fpayAcc", ""));
                stream.addChild(new XElement("fpaycryType", ""));

            } else {
                stream.addChild(new XElement("accountNo", ""));
                stream.addChild(new XElement("payCryType", ""));
                stream.addChild(new XElement("rcvAcc", ""));
                stream.addChild(new XElement("rcvCryType", ""));
                stream.addChild(new XElement("businessType", ""));
                stream.addChild(new XElement("incryType", ""));
                stream.addChild(new XElement("buyAmt", ""));
                stream.addChild(new XElement("outcryType", ""));
                stream.addChild(new XElement("sellAmt", ""));
                stream.addChild(new XElement("deliDate", ""));
                stream.addChild(new XElement("sexcRate", ""));
                stream.addChild(new XElement("forwdRate", ""));
//                <nsetlDate></nsetlDate><!--近端交割日期char(8), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输; 格式：YYYYMMDD-->
                stream.addChild(new XElement("nsetlDate", p_reqFX01.singleDetail.nsetlDate.replace("-","")));
//                <nType></nType><!--买入/卖出(近端) char(1), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输; 数据字典：0-买入；1-卖出-->
                String ntype = p_reqFX01.singleDetail.nType;
                stream.addChild(new XElement("nType", ntype));
                /*
                if ("0".equals(ntype)) {
//            <nincryType></nincryType><!--买入币种(近端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为0-买入时必输，为1-卖出时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                    stream.addChild(new XElement("nincryType", convertCurToBank(p_reqFX01.singleDetail.nincryType)));
//            <ninAmt></ninAmt><!--买入金额 (近端) decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为0-买入时必输，为1-卖出时选输;-->
                    stream.addChild(new XElement("ninAmt", p_reqFX01.singleDetail.buyAmt));
                    stream.addChild(new XElement("noutcryType", ""));
                    stream.addChild(new XElement("noutAmt", ""));
                } else {
                    stream.addChild(new XElement("nincryType", ""));
                    stream.addChild(new XElement("ninAmt", ""));
//            <noutcryType></noutcryType><!--卖出币种（近端）char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为1-卖出时必输，为0-买入时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                    stream.addChild(new XElement("noutcryType", convertCurToBank(p_reqFX01.singleDetail.noutcryType)));
//            <noutAmt></noutAmt><!--卖出金额（近端）decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为1-卖出时必输，为0-买入时选输;-->
                    stream.addChild(new XElement("noutAmt", p_reqFX01.singleDetail.sellAmt));
                }*/
                //            <nincryType></nincryType><!--买入币种(近端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为0-买入时必输，为1-卖出时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                stream.addChild(new XElement("nincryType", convertCurToBank(p_reqFX01.singleDetail.nincryType)));
//            <ninAmt></ninAmt><!--买入金额 (近端) decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为0-买入时必输，为1-卖出时选输;-->
                stream.addChild(new XElement("ninAmt", p_reqFX01.singleDetail.ninAmt));
                //            <noutcryType></noutcryType><!--卖出币种（近端）char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为1-卖出时必输，为0-买入时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                stream.addChild(new XElement("noutcryType", convertCurToBank(p_reqFX01.singleDetail.noutcryType)));
                //            <noutAmt></noutAmt><!--卖出金额（近端）decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<nType>标签为1-卖出时必输，为0-买入时选输;-->
                stream.addChild(new XElement("noutAmt", p_reqFX01.singleDetail.noutAmt));
//                <nexcRate></nexcRate><!--近端汇率decimal(19,8), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输-->
                stream.addChild(new XElement("nexcRate", p_reqFX01.singleDetail.nexcRate));
//            <nrcvAcc></nrcvAcc><!--收款账号(近端) char(12), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输-->
                stream.addChild(new XElement("nrcvAcc", p_reqFX01.singleDetail.nrcvAcc));
//            <nrcvcType></nrcvcType><!--收款账户币种(近端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输；数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD -->
                stream.addChild(new XElement("nrcvcType",
                        convertCurToBank(p_reqFX01.singleDetail.nrcvAcc.substring(p_reqFX01.singleDetail.nrcvAcc.length() - 2))));
//            <npayAcc></npayAcc><!--付款账号(近端) char(12), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输-->
                stream.addChild(new XElement("npayAcc", p_reqFX01.singleDetail.npayAcc));
//            <npaycryType></npaycryType><!--付款账户币种(近端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输；数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD -->
                stream.addChild(new XElement("npaycryType",
                        convertCurToBank(p_reqFX01.singleDetail.npayAcc.substring(p_reqFX01.singleDetail.npayAcc.length() - 2))));
//                <fsetlDate></fsetlDate><!--远端交割日期char(8), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输; 格式：YYYYMMDD-->
                stream.addChild(new XElement("fsetlDate", p_reqFX01.singleDetail.fsetlDate.replace("-","")));
                String fType = p_reqFX01.singleDetail.fType;
                //            <fType></fType><!--买入/卖出 (远端) char(1), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输; 数据字典：0-买入；1-卖出-->
                stream.addChild(new XElement("fType", fType));
                /*
                if ("0".equals(fType)) {
                    //            <fincryType></fincryType><!--买入币种(远端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为0-买入时必输，为1-卖出时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                    stream.addChild(new XElement("fincryType", convertCurToBank(p_reqFX01.singleDetail.fincryType)));
//            <finAmt></finAmt><!--买入金额(远端) decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为0-买入时必输，为1-卖出时选输;-->
                    stream.addChild(new XElement("finAmt", p_reqFX01.singleDetail.finAmt));
                    stream.addChild(new XElement("foutcryType", ""));
                    stream.addChild(new XElement("foutAmt", ""));
                } else {
                    stream.addChild(new XElement("fincryType", ""));
                    stream.addChild(new XElement("finAmt", ""));
//                    <foutcryType></foutcryType><!--卖出币种(远端）char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为1-卖出时必输，为0-买入时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                    stream.addChild(new XElement("foutcryType", convertCurToBank(p_reqFX01.singleDetail.foutcryType)));
//            <foutAmt></foutAmt><!--卖出金额(远端) decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为1-卖出时必输，为0-买入时选输;-->
                    stream.addChild(new XElement("foutAmt", p_reqFX01.singleDetail.foutAmt));
                }*/
                //            <fincryType></fincryType><!--买入币种(远端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为0-买入时必输，为1-卖出时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                stream.addChild(new XElement("fincryType", convertCurToBank(p_reqFX01.singleDetail.fincryType)));
                //            <finAmt></finAmt><!--买入金额(远端) decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为0-买入时必输，为1-卖出时选输;-->
                stream.addChild(new XElement("finAmt", p_reqFX01.singleDetail.finAmt));
                //                    <foutcryType></foutcryType><!--卖出币种(远端）char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为1-卖出时必输，为0-买入时选输; 数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD 、21-SEK、38-THB、93-ZAR -->
                stream.addChild(new XElement("foutcryType", convertCurToBank(p_reqFX01.singleDetail.foutcryType)));
//            <foutAmt></foutAmt><!--卖出金额(远端) decimal(15,2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易，<fType>标签为1-卖出时必输，为0-买入时选输;-->
                stream.addChild(new XElement("foutAmt", p_reqFX01.singleDetail.foutAmt));
//            <fexcRate></fexcRate><!--远端汇率decimal(19,8), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输-->
                stream.addChild(new XElement("fexcRate", p_reqFX01.singleDetail.fexcRate));
//            <frcvAcc></frcvAcc><!--收款账号(远端) char(12), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输-->
                stream.addChild(new XElement("frcvAcc", p_reqFX01.singleDetail.frcvAcc));
//            <frcvcryType></frcvcryType><!--收款账户币种(远端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输；数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD -->
                stream.addChild(new XElement("frcvcryType",
                        convertCurToBank(p_reqFX01.singleDetail.frcvAcc.substring(p_reqFX01.singleDetail.frcvAcc.length() - 2))));
//            <fpayAcc></fpayAcc><!--付款账号(远端) char(12), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输-->
                stream.addChild(new XElement("fpayAcc", p_reqFX01.singleDetail.fpayAcc));
//            <fpaycryType></fpaycryType><!--付款账户币种(远端) char(2), 交易方式为即期外汇交易和远期外汇交易时，送空；交易方式为掉期外汇交易时，必输；数据字典：29-AUD、28-CAD、15-CHF、01-CNY、51-EUR、12-GBP、13-HKD、27-JPY、32-NOK、62-NZD、18-SGD、14-USD -->
                stream.addChild(new XElement("fpaycryType",
                        convertCurToBank(p_reqFX01.singleDetail.fpayAcc.substring(p_reqFX01.singleDetail.fpayAcc.length() - 2))));
            }
//            <tranDate></tranDate><!--交易日期char(8)，必输-->
            stream.addChild(new XElement("tranDate", p_reqFX01.singleDetail.tranDate.replace("-","")));
//            <memo></memo><!--备注char(60),可空-->
            stream.addChild(new XElement("memo", p_reqFX01.singleDetail.memo));
//            <ceiforexNumber></ceiforexNumber><!--信银国际外汇交易号（原掉期交易）char(20), 交易方式为掉期外汇交易时选填; 交易方式为远期外汇交易和即期外汇交易时，送空-->
            if ("3".equals(tranType)) {
                stream.addChild(new XElement("ceiforexNumber", p_reqFX01.singleDetail.ceiforexNumber));
            }else{
                stream.addChild(new XElement("ceiforexNumber", ""));
            }
            xmlWriter.writeXElement(stream);
            String[] bankResult = sendToBank(xmlWriter.toXmlString());
            if (bankResult[0].length() == 0) {
                StringBuilder tmpBkMsg = new StringBuilder();
                XmlTextReader tmpBkReader = loadBankRespXmlReader(bankResult[1], tmpBkMsg);
                if (tmpBkReader != null) {
                    detail.respCode = "0";
                    detail.respInfo = tmpBkReader.getFirstText("/stream/statusText");
                    detail.transState = tmpBkReader.getFirstText("/stream/status");
                    detail.payInfoCode = detail.transState;
                    detail.reqSeqID = p_reqFX01.singleDetail.askNumber;
                } else {
                    detail.respCode = "-1";
                    detail.respInfo = tmpBkMsg.toString();
                }
            } else if (bankResult[0].equals(ConnState.FAIL)) {
                detail.respCode = "0";
                detail.respInfo = bankResult[1];
                detail.reqSeqID = p_reqFX01.singleDetail.askNumber;
                detail.transState = PaymentState.FAIL_Payment;
                detail.payInfoCode = bankResult[0];
            } else {
                detail.respCode = "-1";
                detail.respInfo = bankResult[1];
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            detail.respCode = "-1";
            detail.respInfo = ex.getMessage();
        }
        retAts.writeRetDetail(detail);
        return retAts;
    }

    @Override
    public RetAtsForeignCurrency qryForeignExchange(ReqFX02 p_req1025) throws Exception {
        RetAtsForeignCurrency retAts = new RetAtsForeignCurrency(p_req1025.reqHeader);
        RetAtsForeignCurrencyDetail detail = new RetAtsForeignCurrencyDetail();
        try {
            XmlTextWriter xmlWriter = new XmlTextWriter();
            CNCBI01Header header = new CNCBI01Header();
            header.action = "DLCIDSTT";
            writeCommonHeader(xmlWriter, header);
//            <clientID></clientID><!--客户流水号char(20)-->
            xmlWriter.writeElementString("clientID", p_req1025.askNumber);
//            <type></type><!--
            xmlWriter.writeElementString("type", "");
            xmlWriter.writeEndDocument();
            String[] bankResult = sendToBank(xmlWriter.toXmlString());
            if (bankResult[0].length() == 0) {
                StringBuilder tmpBkMsg = new StringBuilder();
                XmlTextReader tmpBkReader = loadBankRespXmlReader(bankResult[1], tmpBkMsg);
                if (tmpBkReader != null) {
                    String tmpStatus = tmpBkReader.getFirstText("/stream/status");
                    String tmpStatusText = tmpBkReader.getFirstText("/stream/statusText");
                    if (tmpStatus != null && tmpStatus.equals("AAAAAAA")) {
                        if (tmpBkReader.read("/stream/list")) {
                            if (tmpBkReader.readedXElement.getAttrValue("name").equals("userDataList")) {
                                detail.reqSeqID = p_req1025.askNumber;
                                detail.respCode = "0";
                                detail.respInfo = tmpBkReader.readedXElement.getSingleText("row/statusText");
                                detail.payInfoCode = tmpBkReader.readedXElement.getSingleText("row/status");
                                detail.transState = "stt+" + tmpBkReader.readedXElement.getSingleText("row/stt");
                                if ("AAAAAAB".equals(detail.payInfoCode) || "AAAAAAC".equals(detail.payInfoCode)) {
                                    detail.transState = detail.payInfoCode;
                                }
                            } else {
                                detail.respCode = "-1";
                                detail.respInfo = "未找到userDataList的list";
                            }
                        } else {
                            detail.respCode = "-1";
                            detail.respInfo = "未找到/stream/list";
                        }
                    } else if (tmpStatus != null && tmpStatus.length() > 0) {
                        if ("ED12001".equals(tmpStatus) || "ED12002".equals(tmpStatus)) {//系统登录中,请稍候再试.
                            detail.respCode = "-1";
                        } else {
                            detail.respCode = "0";
                        }
                        detail.reqSeqID = p_req1025.askNumber;
                        detail.payInfoCode = tmpStatus;
                        detail.respInfo = tmpStatusText;
                        detail.transState = tmpStatus + "+" + tmpStatusText;
                    } else {
                        detail.respCode = "-1";
                        detail.respInfo = tmpStatusText;
                    }
                } else {
                    detail.respCode = "-1";
                    detail.respInfo = tmpBkMsg.toString();
                }
            } else {
                detail.respCode = "-1";
                detail.respInfo = bankResult[1];
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            detail.respCode = "-1";
            detail.respInfo = ex.getMessage();
        }
        retAts.writeRetDetail(detail);
        return retAts;
    }
}
